package com.example.wenhua.mapper;

import com.example.wenhua.entity.Student;
import com.example.wenhua.dto.StudentCreditsSummary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 学生数据访问层
 */
@Mapper
public interface StudentMapper {
    
    /**
     * 查询所有学生
     */
    List<Student> findAll();
    
    /**
     * 根据学号查询学生
     */
    Student findBySno(String sno);
    
    /**
     * 根据系名查询学生
     */
    List<Student> findByDept(String dept);
    
    /**
     * 新增学生
     */
    int insert(Student student);
    
    /**
     * 更新学生信息
     */
    int update(Student student);
    
    /**
     * 删除学生
     */
    int delete(String sno);
    
    /**
     * 批量插入学生
     */
    int batchInsert(@Param("students") List<Student> students);
    
    /**
     * 条件查询学生（支持分页）
     */
    List<Student> queryStudents(@Param("sno") String sno, @Param("sname") String sname, 
                               @Param("ssex") String ssex, @Param("sdept") String sdept,
                               @Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge,
                               @Param("pageSize") Integer pageSize, @Param("offset") Integer offset);
    
    /**
     * 条件查询学生总数
     */
    int countStudents(@Param("sno") String sno, @Param("sname") String sname, 
                     @Param("ssex") String ssex, @Param("sdept") String sdept,
                     @Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
    
    /**
     * 根据学号查询学生已修学分总数
     */
    Integer getTotalCreditsBySno(String sno);
    
    /**
     * 查询所有学生的学分统计信息
     */
    List<StudentCreditsSummary> findStudentCreditsSummary();
}